<?php
class Arm_Controller_Plugin_Page extends Zend_Controller_Plugin_Abstract
{

 
    public function postDispatch(Zend_Controller_Request_Abstract $request)
    {

       if($request->getParam('arm_page_run') === '1') {
           return;
       }

    // Проверим есть ли страница Если страницы нету просто выходим.
       $page = new Arm_Page();
       $pageData = $page->getPage($request->getRequestUri());
       if($pageData === false) {
           return;
       } else {
           // назначаем данные в объект вида. без значения эта страница структурная или модульная
           $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('ViewRenderer');
           $viewRenderer->view->assign($pageData);
           // определим к кому модулю придлежит страница
           $idModule = (int) $pageData[Arm_Page::ID_MODULE];
           if($idModule !== 0) {
               $module = Arm_Module::getInstance()->getNameModule($idModule);
           } else {
               $module = 'default';
           }
       }
   
       $response = $this->getResponse();
       
       if($response->isException())  {   
         // Нужно проверяет тип ислючений 
         $eArray = $response->getException();
         $typeError = get_class($eArray[0]); 
       
        // Если  контролер и актион есть не назначаем обработчик страниц по умолчанию.
        if($typeError !== 'Zend_Controller_Dispatcher_Exception' and $typeError !== 'Zend_Controller_Action_Exception') {
            return;
        }
   
        // назначаем обработчик по умолчанию.
        $request->setParam('arm_page_run', '1')
                    ->setModuleName($module)
                    ->setControllerName('index')
                    ->setActionName('armpage')
                    ->setDispatched(false);
        $response->clearException();
         
       }
      
    }
   
}